// https://leetcode.cn/problems/merge-k-sorted-lists/description/?envType=study-plan-v2&envId=top-100-liked

// /**
//  * Definition for singly-linked list.
//  * struct ListNode {
//  *     int val;
//  *     ListNode *next;
//  *     ListNode() : val(0), next(nullptr) {}
//  *     ListNode(int x) : val(x), next(nullptr) {}
//  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
//  * };
//  */
// class cmp 
// {
//     public:
//    bool operator() (ListNode* L1,ListNode* L2) 
//     {
//         return L1->val > L2->val;
//     }
// }; 
// class Solution {
// public:
//     ListNode* mergeKLists(vector<ListNode*>& lists) {
//         // 解方法一，一直合并两个有序链表
//         // 可以创建一个小根堆

//         priority_queue<ListNode*, vector<ListNode*>, cmp> heap;
//         for (auto i : lists) 
//         {
//             if (i)
//                 heap.push(i);
//         }
//         ListNode* NewList = new ListNode(0);
//         ListNode* Prev = NewList;
//         while(!heap.empty())
//         {
//             //接下来为插入节点
//             ListNode* Top = heap.top();
//             heap.pop();
//             Prev->next= Top;
//             Prev = Top;
//             if(Top->next)//然后这个节点的下一个节点不为空，就继续把下一个插入堆，然后自动排序
//             {
//                 heap.push(Top->next);
//             }
//         }
        
//         return NewList->next;
//     }
// };
// //我们先把这几个的链表的头节点分别这个堆进行排序，然后进行堆排序，把最小的节点放在最上放，然后把
// //堆顶元素插入到新的链表，然后再把这个链表的下一个节点，插入到堆，然后再次进行排序